package com.example.myblog1_0.util;

import com.aliyun.oss.OSSClient;

import java.io.*;
import java.util.Base64;

/**
 * @Author: xc
 * @Date: 2019/1/9 13:06
 * @Description: 转换文件格式,上传文件到阿里云
 **/
public class FileUtil {
    private static String BUCKET_NAME = "xzio";
    private static String FILEDIR = "static/";
    /**
     * 将base64转化为file文件并存在target中
     * @param filePath 储存路径
     * @param base64 图片的base64字符编码
     * @param fileName 图片自身名称
     * @return
     */
    public File base64ToFile(String filePath,String base64,String fileName){
        File file = null;
        //在target中创建文件目录
        File dir = new File(filePath);
        if (!dir.exists() && !dir.isDirectory()){
            /**
             * mkdir()  如果你想在已经存在的文件夹(D盘下的yyy文件夹)下建立新的文件夹（2010-02-28文件夹），就可以用此方法。
                        此方法不能在不存在的文件夹下建立新的文件夹。假如想建立名字是”2010-02-28”文件夹，那么它的父文件夹必须存在。

             * mkdirs() 如果你想根据File里的路径名建立文件夹（当你不知道此文件夹是否存在，也不知道父文件夹存在），就可用此方法，
                        它建立文件夹的原则是：如果父文件夹不存在并且最后一级子文件夹不存在，它就自动新建所有路经里写的文件夹；
                        如果父文件夹存在，它就直接在已经存在的父文件夹下新建子文件夹。
             */
            dir.mkdirs();
        }
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        try {
            byte[] bytes = Base64.getDecoder().decode(base64);
            file = new File(filePath + "/" + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bytes);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (bos!=null){
                try {
                    /**
                     * 必须先flush缓冲区，避免数据丢失
                     */
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return file;
    }
    public String uploadFile(File file,String catalog){
        OSSClient ossClient = OSSClientUtil.getOSSClient();
        String myMD5 = OSSClientUtil.uploadObject2OSS(ossClient,file,BUCKET_NAME,FILEDIR +catalog);
        String url = OSSClientUtil.getUrl(file.getName());
        return url;
    }
}
